package com.example.entity.pojo;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.Document;
import org.springframework.data.elasticsearch.annotations.Field;
import org.springframework.data.elasticsearch.annotations.FieldType;

@TableName("user")
@Document(indexName = "user_index") // ES索引名
//@SyncConfig(indexName = "user_index") // 可选：类级别配置
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class User {
    @Id
    @TableId(type = IdType.AUTO) // 自增主键，对应数据库 AUTO_INCREMENT
    @Field(index = false,type = FieldType.Long,store = true) // ES字段配置
    private Long id;

    //index=true——被 ES 索引（即支持搜索）    type——类型    store=true——独立存储（除了 _source 外，额外保存一份）
    //analyzer——指定索引时使用的分词器         searchAnalyzer——指定搜索时使用的分词器
    @Field(index=true,type=FieldType.Text,store=true,analyzer="ik_smart",searchAnalyzer="ik_smart") // ES字段配置
    private String name;
//    ES常见的简单类型有：
//    - 字符串：text（可分词的文本）、keyword（精确值，例如：品牌、国家、ip地址）、IP（不包含端口port）
//    - 数值：byte、short、integer、long、float、double
//    - 布尔：boolean
//    - 日期：date
//    - 字节数组：Binary
//    - 对象：object

    @Field(index=true,type=FieldType.Integer,store=true) // ES字段配置
    private Integer age;

//    @Field(type=FieldType.Object,store=true) // ES字段配置（当type为Objcet时只需在Ordr单独设置各属性，不需要设置index、analyzer、searchAnalyzer）
//    private Ordr ordr;

//    private String password; //密码
//    private String phone; //注册手机号
//    private String info; //详细信息
//    private Integer status; //使用状态（1正常 2冻结）
//    private Integer balance; //账户余额
//    private LocalDateTime createTime; //创建时间
//    private LocalDateTime updateTime; //更新时间
}
